﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Seguridad.Entity;
namespace Crosland.Automotriz.Seguridad.DataAccess
{
    public class clsGrupoDAO
    {
        Automotriz_TesisEntities bd = new Automotriz_TesisEntities();


        public List<T_SEG_GRUPO> listarGrupo(string USR_CREACION)
        {
            List<T_SEG_GRUPO> lista = new List<T_SEG_GRUPO>();
            try
            {
                var q = from g in bd.T_SEG_GRUPO
                        where g.USR_CREACION == USR_CREACION
                        orderby g.DES_NOMBRE 
                        select g;

                lista = q.ToList();
            }
            catch (Exception) { 
            
            }
            return lista;
        
        }

        public List<T_SEG_GRUPO> listarAccesosUsuarios()
        {
            List<T_SEG_GRUPO> lista = new List<T_SEG_GRUPO>();
            try
            {
                var q = from g in bd.T_SEG_GRUPO
                        where g.IND_ESTADO=="A"
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
            }
            catch (Exception)
            {
              


            }
            return lista;

        }




















        public List<T_SEG_USUARIO_GRUPO> listarUsuario_Grupo()
        {
            List<T_SEG_USUARIO_GRUPO> lista = new List<T_SEG_USUARIO_GRUPO>();
            try
            {
                var q = from g in bd.T_SEG_USUARIO_GRUPO            
                        
                        select g;

                lista = q.ToList();
            }
            catch (Exception)
            {



            }
            return lista;

        }

        public bool Insertar(T_SEG_GRUPO Obj)
        {
            try
            {
                bd.AddObject("T_SEG_GRUPO", Obj);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
        
       

       

        public int saveGrupo(T_SEG_GRUPO Obj)
        {
            List<int> lis = new List<int>();
            List<T_SEG_GRUPO> listaOpcion = new List<T_SEG_GRUPO>();
            T_SEG_GRUPO grupoInsert = new T_SEG_GRUPO();
            int grupoid = 0;
            try
            {
                bd.AddObject("T_SEG_GRUPO", Obj);
                bd.SaveChanges();

                var q = from c in bd.T_SEG_GRUPO
                        where c.ID_GRUPO == Obj.ID_GRUPO
                        select c;

                listaOpcion = q.ToList();

               
                
               
            }
            catch (Exception)
            {

            }
            return grupoid;
        }

        public bool Modificar(T_SEG_GRUPO obj)
        {
            try
            {
                bd.AttachTo("T_SEG_GRUPO", obj);
                bd.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;

            }
            return true;
        }

        public bool Eliminar(T_SEG_GRUPO obj)
        {
            try
            {
                bd.AttachTo("T_SEG_GRUPO", obj);
                bd.DeleteObject(obj);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }


        public void Delete(T_SEG_GRUPO id)
        {
            try
            {
                bd.AttachTo("T_SEG_GRUPO", id);
                bd.DeleteObject(id);
                bd.SaveChanges();
            }
            catch (Exception)
            {

            }

        }
        
        public bool PA_delteGrupoOpcion(int id_grupo)
        {
            try
            {
                bd.ExecuteStoreCommand("delete from T_SEG_GRUPO_OPCION where id_grupo=" + id_grupo);
                return true;
            }
            catch
            {

                return false;
            }
            

        }
        
        public bool Actualiza_EstadoGrupo(int idGrupo, string estado)
        {
            try
            {
                bd.ExecuteStoreCommand("update T_SEG_GRUPO set IND_ESTADO='" + estado + "' where ID_GRUPO=" + idGrupo);

                return true;
            }
            catch
            {
                return false; 
            }
        }

        public int InsertarGrupo(T_SEG_GRUPO Obj)
        {

            try
            {
                List<string> lis = bd.USP_SAVE_GRUPO(Obj.DES_NOMBRE, Obj.DES_DESCRIPCION, Obj.USR_CREACION, Obj.IND_ESTADO, Obj.USR_ACTUALIZO, Obj.FEC_CREACION, Obj.FEC_ACTUALIZO).ToList();

                return Convert.ToInt32(lis[0]);
            }
            catch (Exception)
            {
                
                
            }

            return 0;
          

           
        }

        public List<int> ObtenerOpcion_Grupo(int idGrupo)
        {
            List<int> lis = new List<int>();
            List<VW_GRUPO_OPCION> listaOpcion = new List<VW_GRUPO_OPCION>();
            try
            {
                var q = from c in bd.VW_GRUPO_OPCION
                        where c.ID_OPCION == idGrupo
                        select c;

                listaOpcion = q.ToList();

                foreach (VW_GRUPO_OPCION item in listaOpcion)
                {
                    lis.Add(item.ID_OPCION);
                }

            }
            catch (Exception)
            {
            }
            return lis;
        }

        public bool InsertarGrupoOpcion(VW_GRUPO_OPCION Obj)
        {
            try
            {
                bd.AddObject("VW_GRUPO_OPCION", Obj);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public bool InsertarGrupoOpcion2(int idGrupo, int id_opcion)
        {
            try
            {
      int n = bd.ExecuteStoreCommand("exec USP_SAVE_GRUPOOPCION '" + idGrupo + "','" + id_opcion + "'");
      

            return Convert.ToBoolean(n);
            }
            catch 
            {
                return false;
               
            }


           


        }

        public int save(T_SEG_GRUPO Obj)
        {
            int grupoid = 0;
            try
            {
                bd.AddObject("T_SEG_GRUPO", Obj);
                bd.SaveChanges();
                grupoid = Convert.ToInt32(Obj);
                return grupoid;
            }
            catch (Exception)
            {

            }
            return grupoid;
        }

     

        public T_SEG_GRUPO ObtenerGrupo(int idGrupo)
        {
            List<T_SEG_GRUPO> lis = new List<T_SEG_GRUPO>();
            T_SEG_GRUPO group = new T_SEG_GRUPO();
            try
            {
                var q = from c in bd.T_SEG_GRUPO
                        where c.ID_GRUPO == idGrupo
                        select c;

                lis = q.ToList();

                group = lis[0];
                return group;

            }
            catch (Exception)
            {
                return group;
            }
        }


        public List<T_SEG_GRUPO> listarGrupo2()
        {
            List<T_SEG_GRUPO> lista = new List<T_SEG_GRUPO>();
            try
            {
                var q = from g in bd.T_SEG_GRUPO
                        orderby g.DES_NOMBRE

                        select g;

                lista = q.ToList();
            }
            catch (Exception)
            {
                
            }
            return lista;

        }


        public List<T_SEG_GRUPO> GetByCriteria(string nombre)
        {
            List<T_SEG_GRUPO> lista = new List<T_SEG_GRUPO>();
            try
            {
                var q = from g in bd.T_SEG_GRUPO
                        where g.DES_NOMBRE == nombre
                        where g.IND_ESTADO != "E"
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
            }
            catch (Exception)
            {
            }
            return lista;

        }


        public T_SEG_GRUPO GetById(int idGrupo)
        {
            try
            {
                var q = from g in bd.T_SEG_GRUPO
                        where g.ID_GRUPO == idGrupo
                        select g;

                return q.ToList()[0];
            }
            catch (Exception)
            {
                return null;
            }
        }











        public List<T_SEG_GRUPO> listarGrupoxOpcion(int id_opcion)
        {
            List<T_SEG_GRUPO> lista = new List<T_SEG_GRUPO>();
            try
            {
                var q = from tg in bd.T_SEG_GRUPO
                        from op in bd.T_SEG_OPCION
                        from opg in bd.VW_GRUPO_OPCION
                        where tg.IND_ESTADO == "A" && opg.ID_GRUPO == tg.ID_GRUPO && opg.ID_OPCION == op.ID_OPCION && op.ID_OPCION == id_opcion

                        orderby tg.DES_NOMBRE
                        select tg;
                        

                lista = q.ToList();
            }
            catch (Exception)
            {



            }
            return lista;

        }



        public IEnumerable<Object> listaUsuarioxGrupo(int id_grupo) {

            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from tsu in bd.T_SEG_USUARIO
                        from tgc in bd.T_MAE_TABLA_GENERAL_CAB
                        from tgd in bd.T_MAE_TABLA_GENERAL_DET
                        from ug in bd.T_SEG_USUARIO_GRUPO
                        where tgc.ID_GENERAL_CAB==tgd.ID_GENERAL_CAB
                          && tsu.ID_TIPO_USUARIO==tgd.ID_GENERAL_DET 
                          && tsu.ID_USUARIO==ug.ID_USUARIO 
                          && tgc.ID_GENERAL_CAB==3
                          && ug.ID_GRUPO == id_grupo
                        select new
                        {
                            tsu.ID_USUARIO,
                            ESTADO=tsu.IND_ESTADO=="A"?"Activo":
                                   tsu.IND_ESTADO=="I"?"Inactivo":"_",            
                            tsu.DES_APELLIDOS,
                            tsu.DES_NOMBRE,
                            tsu.DES_EMAIL,
                            TIPO_USUARIO = tgd.DES_LARGA                                        


                        };

                list = q.ToList();
            }
            catch
            {
                
             
            }


            return list;
        
        }




        public bool EliminaRelacionGrupoOpcion(int idGrupo ,int idOpcion) {

            try
            {
                bd.ExecuteStoreCommand("DELETE FROM T_SEG_GRUPO_OPCION WHERE ID_GRUPO=" + idGrupo + " AND ID_OPCION= " + idOpcion);
                return true;
            }
            catch 
            {

                return false;
            }


           

        }




    }
}
